package com.alisveris.dao;

import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Vector;

import com.alisveris.pojo.Adresleme;
import com.alisveris.pojo.Hesap;
import com.alisveris.pojo.Urun;

@SuppressWarnings("rawtypes")
public class AlisVerisSepeti implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	// Sepete eklenecek ürünler en iyi Vector objesi
	// içinde saklanabilir.
	
	protected Vector urunler;

	public AlisVerisSepeti() {//yeni bir sepet aciliri.

		urunler = new Vector();
	}

	public Vector getUrunler() {

		return (Vector) urunler;
	}

	// Çoklu ürünler için yeni ekleme.
	// Varolan ürünlerden eklenecekse bu ürünün
	// talep miktarını artırma, eğer yeni ürün eklenecekse
	// yeni bir ekleme yapma.
	
	@SuppressWarnings("unchecked")
	public synchronized void addUrun(Urun yeniUrun) {
		urunler.addElement(yeniUrun);
	}

	// Ürünlerden birini çıkarma
	// Her ürünün bir sıra numarası var
	// Dolayısıyla numarası parametre olarak aktarılıyor.
	public synchronized void removeUrun(int urunNumarası) {
		Urun urun = (Urun) urunler.elementAt(urunNumarası);

		// Talepten ürün miktarı kadar düşme
		urun.talepMiktar -= urun.miktar;

		// Eğer talep miktarı sıfırlanmışsa
		// ürünü sepetten çıkar
		if (urun.talepMiktar <= 0) {
			urunler.removeElementAt(urunNumarası);
		}
	}
	
	 protected static int yeniTalepNumara = 1;
		
	   // Her bir talep için kayıt etme ve kayda
	   // numara verme işlemi
	   public String talepTamamla(Hesap hesaplama, Adresleme adresleme) throws AlisVerisSepetiHatasi {
		      	  
	      // Her bir kayıt için numara belirleme ve bu 
		  // kayıtların bir dosya içine kaydı.
		  try  {
		     int talepNumarası = 0;
		    	
	         // Çoklu ulaşımı engelleme
	         synchronized(this) {
	            talepNumarası = yeniTalepNumara;
	            yeniTalepNumara += 1;
	         }
	            
	         PrintWriter dosyaYaz = new PrintWriter(
	             new FileOutputStream("talep" + talepNumarası));
	            
	         // Hesap bilgilerinin dosyaya yazılması
	         dosyaYaz.println("--- Kart Bilgileri ---");
	         dosyaYaz.println("Kart Tipi:" +hesaplama.krediKartTip);
	         dosyaYaz.println("Kart Numarası:" +hesaplama.krediKartNumara);
	         dosyaYaz.println("Kart Üst. İsim:" +hesaplama.kartIsim); 
	         dosyaYaz.println();
	            
	         // Adresleme bilgilerinin dosyaya yazılması
	         dosyaYaz.println("--- Müşteri Bilgileri ---");
	         dosyaYaz.println("Adı:" +adresleme.isim);
	         dosyaYaz.println("Adres:" +adresleme.adres);
	         dosyaYaz.println("Şehir:" +adresleme.sehir);
	         if (adresleme.ulke != null) {
	            dosyaYaz.println("Ülke:" +adresleme.ulke);
	         }
	         if (adresleme.postaKodu != null) {
	          	dosyaYaz.println("Posta Kodu:" +adresleme.postaKodu);
	         }
	         if (adresleme.telefon != null)  {
	           	dosyaYaz.println("Telefon:" +adresleme.telefon);            
	         }	                              	
		     if (adresleme.ePosta != null) {
	           	dosyaYaz.println("E Posta:" +adresleme.ePosta);            
	         }
	         dosyaYaz.println();
	            
	         // Ürün bilgilerinin yazılması
	         dosyaYaz.println("--- Talep edilen Ürünler ---");
	         dosyaYaz.println("Ürün Kodu  Fiyatı  Miktarı  ");
	         Enumeration e = urunler.elements();
	         while (e.hasMoreElements()) {
	           	Urun urun = (Urun) e.nextElement();
	            dosyaYaz.println(urun.kod + ",         " + 
	                             urun.fiyat + ",         " + 
	                             urun.talepMiktar);
	         }
	         dosyaYaz.close();
	            
	         // Talep numarasını gönderme 
	         return "" + talepNumarası;
	      }
	      catch (Exception hata) {
	         throw new AlisVerisSepetiHatasi(
	            	"Talep kaydedilirken hata oluştu:" +
	        	    hata.toString());
	      } 
	   } 

}
